angular.module('furion.services.wechat', [])

.factory "WechatJS", (RemoteSrv, Toast, Config, $q)->
  {
    getSDK: ()->
      if typeof(wx) == "undefined"
        delay = $q.defer()
        $.ajax
          url: "https://res.wx.qq.com/open/js/jweixin-1.0.0.js"
          dataType: "script"
          async: true
          success: ()->
            delay.resolve()
        delay.promise

    getUrl: ()->
      (location.href.split('#')[0])

    getToken: (url = this.getUrl())->
      token = null
      # 此处为同步请求
      RemoteSrv.getWechatToken(url).done (resp)->
        token = resp.data
      return token

    setConfig: (url = this.getUrl())->
      return if typeof(wx) == "undefined"

      token = this.getToken(url)
      wx.config({
        debug: false, # 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
        appId: 'wx10481bc807dd29b0' # 必填，公众号的唯一标识
        timestamp: token.timestamp # 必填，生成签名的时间戳
        nonceStr: token.noncestr # 必填，生成签名的随机串
        signature: token.signature # 必填，签名，见附录1
        jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone'] # 必填，需要使用的JS接口列表，所有JS接口列表见附录2
      })

    defaultImgUrl: ()->
      "#{window.location.protocol}//#{window.location.host}/mobile/img/icon.jpg"

    share: (title, desc, share_link, imgUrl)->
      return if typeof(wx) == "undefined"

      this.setConfig()

      title = title
      desc = desc
      share_link ||= location.href
      imgUrl ||= this.defaultImgUrl()

      wx.onMenuShareTimeline({
        title:  title # 分享标题
        link: share_link # 分享链接
        imgUrl: imgUrl # 分享图标
        success: ()->
          # 用户确认分享后执行的回调函数
          Toast.show '分享成功'
          $scope.$emit "modals:close", {modal_name: 'share_tip'}
        cancel: ()->
                      # 用户取消分享后执行的回调函数
      })
      wx.onMenuShareAppMessage({
        title: title # 分享标题
        desc: desc # 分享描述
        link: share_link # 分享链接
        imgUrl: imgUrl # 分享图标
        type: 'link' # 分享类型music、video或link，不填默认为link
        # dataUrl: '' # 如果type是music或video，则要提供数据链接，默认为空
        success: ()->
          # 用户确认分享后执行的回调函数
          Toast.show '分享成功'
          $scope.$emit "modals:close", {modal_name: 'share_tip'}
        cancel: ()->
          # 用户取消分享后执行的回调函数
      })
      wx.onMenuShareQQ({
        title: title # 分享标题
        desc: desc # 分享描述
        link: share_link # 分享链接
        imgUrl: imgUrl # 分享图标
        success: ()->
          # 用户确认分享后执行的回调函数
          Toast.show '分享成功'
          $scope.$emit "modals:close", {modal_name: 'share_tip'}
        cancel: ()->
          # 用户取消分享后执行的回调函数
      })
      wx.onMenuShareWeibo({
        title: title # 分享标题
        desc: desc # 分享描述
        link: share_link # 分享链接
        imgUrl: imgUrl # 分享图标
        success: ()->
          # 用户确认分享后执行的回调函数
          Toast.show '分享成功'
          $scope.$emit "modals:close", {modal_name: 'share_tip'}
        cancel: ()->
          # 用户取消分享后执行的回调函数
      })
      wx.onMenuShareQZone({
        title: title # 分享标题
        desc: desc # 分享描述
        link: share_link # 分享链接
        imgUrl: imgUrl # 分享图标
        success: ()->
          # 用户确认分享后执行的回调函数
          Toast.show '分享成功'
          $scope.$emit "modals:close", {modal_name: 'share_tip'}
        cancel: ()->
          # 用户取消分享后执行的回调函数
      })

    shareProduct: (product)->
      return if typeof(wx) == "undefined"

      this.setConfig()

      title = "#{product.vname} - @球友"
      desc = "#{product.brief}"
      imgUrl = this.defaultImgUrl()
      share_link = location.href

      wx.onMenuShareTimeline({
        title:  title # 分享标题
        link: share_link # 分享链接
        imgUrl: imgUrl # 分享图标
        success: ()->
          # 用户确认分享后执行的回调函数
          Toast.show '分享成功'
          $scope.$emit "modals:close", {modal_name: 'share_tip'}
        cancel: ()->
                      # 用户取消分享后执行的回调函数
      })
      wx.onMenuShareAppMessage({
        title: title # 分享标题
        desc: desc # 分享描述
        link: share_link # 分享链接
        imgUrl: imgUrl # 分享图标
        type: 'link' # 分享类型music、video或link，不填默认为link
        # dataUrl: '' # 如果type是music或video，则要提供数据链接，默认为空
        success: ()->
          # 用户确认分享后执行的回调函数
          Toast.show '分享成功'
          $scope.$emit "modals:close", {modal_name: 'share_tip'}
        cancel: ()->
          # 用户取消分享后执行的回调函数
      })
      wx.onMenuShareQQ({
        title: title # 分享标题
        desc: desc # 分享描述
        link: share_link # 分享链接
        imgUrl: imgUrl # 分享图标
        success: ()->
          # 用户确认分享后执行的回调函数
          Toast.show '分享成功'
          $scope.$emit "modals:close", {modal_name: 'share_tip'}
        cancel: ()->
          # 用户取消分享后执行的回调函数
      })
      wx.onMenuShareWeibo({
        title: title # 分享标题
        desc: desc # 分享描述
        link: share_link # 分享链接
        imgUrl: imgUrl # 分享图标
        success: ()->
          # 用户确认分享后执行的回调函数
          Toast.show '分享成功'
          $scope.$emit "modals:close", {modal_name: 'share_tip'}
        cancel: ()->
          # 用户取消分享后执行的回调函数
      })
      wx.onMenuShareQZone({
        title: title # 分享标题
        desc: desc # 分享描述
        link: share_link # 分享链接
        imgUrl: imgUrl # 分享图标
        success: ()->
          # 用户确认分享后执行的回调函数
          Toast.show '分享成功'
          $scope.$emit "modals:close", {modal_name: 'share_tip'}
        cancel: ()->
          # 用户取消分享后执行的回调函数
      })

    shareActivity: (activity, desc, callback_sucess)->
      return if typeof(wx) == "undefined"

      this.setConfig()

      title = "#{activity.vname} - @球友"
      desc = desc
      imgUrl = this.defaultImgUrl()
      share_link = location.href

      wx.onMenuShareTimeline({
        title:  title # 分享标题
        link: share_link # 分享链接
        imgUrl: imgUrl # 分享图标
        success: ()->
          # 用户确认分享后执行的回调函数
          Toast.show '分享成功'
          callback_sucess()
        cancel: ()->
          # 用户取消分享后执行的回调函数
      })
      wx.onMenuShareAppMessage({
        title: title # 分享标题
        desc: desc # 分享描述
        link: share_link # 分享链接
        imgUrl: imgUrl # 分享图标
        type: 'link' # 分享类型music、video或link，不填默认为link
        # dataUrl: '' # 如果type是music或video，则要提供数据链接，默认为空
        success: ()->
          # 用户确认分享后执行的回调函数
          Toast.show '分享成功'
          callback_sucess()
        cancel: ()->
          # 用户取消分享后执行的回调函数
      })
      wx.onMenuShareQQ({
        title: title # 分享标题
        desc: desc # 分享描述
        link: share_link # 分享链接
        imgUrl: imgUrl # 分享图标
        success: ()->
          # 用户确认分享后执行的回调函数
          Toast.show '分享成功'
          callback_sucess()
        cancel: ()->
          # 用户取消分享后执行的回调函数
      })
      wx.onMenuShareWeibo({
        title: title # 分享标题
        desc: desc # 分享描述
        link: share_link # 分享链接
        imgUrl: imgUrl # 分享图标
        success: ()->
          # 用户确认分享后执行的回调函数
          Toast.show '分享成功'
          callback_sucess()
        cancel: ()->
          # 用户取消分享后执行的回调函数
      })
      wx.onMenuShareQZone({
        title: title # 分享标题
        desc: desc # 分享描述
        link: share_link # 分享链接
        imgUrl: imgUrl # 分享图标
        success: ()->
          # 用户确认分享后执行的回调函数
          Toast.show '分享成功'
          callback_sucess()
        cancel: ()->
          # 用户取消分享后执行的回调函数
      })
  }

.factory "WechatShare", ($ionicActionSheet, Toast)->
  hasWechatPlugin: ()->
    return !(typeof Wechat == "undefined")

  # Wechat Share message Sample
  #
  # message = {
  #   title: "xxx邀您来@球友",
  #   description: "我正在使用云端时代最智能的理财管家APP，资金流动灵活多变，收益稳健可靠，专业化团队管理，快来注册！",
  #   thumb: "www/img/icon.jpg",
  #   mediaTagName: "OA-SPREAD-001",
  #   messageExt: "@球友注册邀请",
  #   messageAction: "<action>dotalist</action>"
  #   media: {
  #     type: Wechat.Type.LINK,
  #     webpageUrl: "https://www.omniaccount.com"
  #   }
  # }
  #

  showShareSheet: (message, callback_sucess)->
    shareOnWechat = this.shareOnWechat
    $ionicActionSheet.show({
      buttons: [
        { text: '分享给微信好友' },
        { text: '分享到微信朋友圈' }
      ],
      cancelText: '取消',
      cancel: ()->
        return
    buttonClicked: (index)->
      shareOnWechat(index, message, callback_sucess)
      return true
    })

  shareOnWechat: (type, message, callback_sucess)->
    scene = switch parseInt(type)
      when 0
        Wechat.Scene.SESSION
      when 1
        Wechat.Scene.TIMELINE
      when 2
        Wechat.Scene.FAVORITE
      else
        console.log 'unknow share type'
        null

    if scene != null
      Wechat.share({
        message: message,
        scene: scene
      }, (()->
        Toast.show("分享成功");
        callback_sucess(scene)
      ), ((reason)->
        Toast.show("分享失败: " + reason);
      ))
